home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / comm / irc / epic4.lha / doc / new-load < prev    next >
Text File  |  2002-09-18  |  2KB  |  45 lines

  1. This is a brief discussion on a new load parser.
  2.  
  3. The current load parser is kind of a hodge podge and a mess.  Plus, it's
  4. pretty slow, and it has a few annoying limitations (such as the maximum
  5. line length.)  I endevor to write a new load parser that fixes as many
  6. of these problems as possible.
  7.  
  8. The new load parser will be a combination of a lexer and a parser, where
  9. the lexer will remove tokens from the load parser, and the parser will
  10. decide what to do with them.  Here are a sample of the possible tokens
  11. you might find in a loaded file:
  12.  
  13.     #    The hash character (HASH)
  14.     /*    The slash-star sequence (SLASH-STAR)
  15.     */    The star-slash sequence (STAR-SLASH)
  16.     ;    The semicolon character (SEMICOLON)
  17.     \n    The newline character (NEWLINE)
  18.     {    The opening brace (LBRACE)
  19.     }    The closing brace (RBRACE)
  20.     \    The backslash character (BACKSLASH)
  21.     ...    The literal string (STRING)
  22.  
  23. The lexer will submit each special token from the file one at a time to
  24. the parser for consideration.  The parser will decide whether to accept
  25. the token, or whether to reject it.  Rejected special tokens are accepted
  26. as literal text strings.  The format of an input file looks roughly like
  27. this:
  28.  
  29.     FILE        := <LINE>*
  30.     LINE        := <C-COMMENT> | <HASH-COMMENT> | <COMMAND> | <EMPTY>
  31.     C-COMMENT    := <SLASH-STAR> <TEXT> <STAR-SLASH>
  32.     HASH-COMMENT    := <HASH> <STRING> <NEWLINE>
  33.     COMMAND        := <TEXT> <COMMAND-SEP>
  34.     COMMAND-SEP     := <NEWLINE> !<BLOCK>
  35.     BLOCK        := <LBRACE> <COMMAND>* <RBRACE>
  36.     EMPTY        := <NEWLINE>
  37.  
  38.     TEXT        := (<STRING>|<NEWLINE>)*
  39.     STRING        := (<NON-SPECIAL-CHAR>|<BACKSLASH> <ANY>)*
  40.  
  41. A "command" is some literal text, followed by some number of blocks.
  42. The text may be seperated from the blocks by a newline and whitespace,
  43. and blocks may be seperated from each other by a newline and whitespace.
  44.  
  45.